\begin{abstract}
Software Defined Networking (SDN) consists in decoupling the control and data planes of a network. A software controller is responsible for managing the routing information of one or more switches; the hardware only handles the forwarding of traffic according to the rules set by the controller. OpenFlow is a SDN protocol proposed to standardize the way that the controller communicates with the network devices in a SDN architecture. OpenFlow is based on an Ethernet switch and provides an API for applications running on top of a network operating system to add or remove rules from the switch's flow table. 
We begin by discussing the background of programmable networks, SDN and OpenFlow. Then we explain the main components of OpenFlow: the flow table, the channel and the controller and we describe how applications can be developed on top of network operating systems such as Nox, Beacon and Maestro. We also survey the most relevant deployments of OpenFlow based networks, including campus networks and test beds. Then we analyse the capabilities and challenges of SDN and OpenFlow. Finally, we identify open issues and we discuss future research directions.
\end{abstract}
